'use strict';
const {
	Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
	class Category extends Model {
		/**
		 * Helper method for defining associations.
		 * This method is not a part of Sequelize lifecycle.
		 * The `models/index` file will call this method automatically.
		 */
		static associate(models) {
			// define association here
		}
	}

	Category.init({
		name: {
			type: DataTypes.STRING,
			allowNull: false,
			validate: {
				notNull: {msg: '标题必须存在'},
				notEmpty: {msg: '标题不能为空'},
				len: {
					args: [2, 45],
					msg: '标题长度需要在2~45之间'
				},
				async isUnique(value) {
					const category = await Category.findOne({where: {name: value}})
					if (category) throw new Error('标题已存在')
				}
			}
		},
		rank: {
			type: DataTypes.INTEGER,
			allowNull: false,
			validate: {
				notNull: {msg: '排序必须存在'},
				notEmpty: {msg: '排序不能为空'},
				isInt: {msg: '排序必须是整数'},
				isPositive: (value) => {
					if (value <= 0) {
						throw new Error('排序必须是正整数')
					}
				}
			}
		}
	}, {
		sequelize,
		modelName: 'Category',
	});
	return Category;
};